gdk: Make query_state() vfunc a void vfunc
authorBenjamin Otte <otte@redhat.com>
Fri, 9 Mar 2012 12:20:41 +0000 (13:20 +0100)
committerBenjamin Otte <otte@redhat.com>
Fri, 9 Mar 2012 12:23:05 +0000 (13:23 +0100)
... and make sure the backends implement it that way.

query_state() return value was ignored in all of GDK and caused crashes
when it failed.

gdk/gdkdevice.c
gdk/gdkdeviceprivate.h
gdk/quartz/gdkdevice-core-quartz.c
gdk/wayland/gdkdevice-wayland.c
gdk/win32/gdkdevice-win32.c
gdk/win32/gdkdevice-wintab.c
gdk/x11/gdkdevice-core-x11.c
gdk/x11/gdkdevice-xi2.c

index 693cedb9b228c8a7992dca3cf21b17ca5180f05c..cd8bda249420297cdf3dd3dc076a0392f1670ab2 100644 (file)
@@ -1588,7 +1588,7 @@ _gdk_device_translate_axis (GdkDevice *device,
   return TRUE;
 }
 
-gboolean
+void
 _gdk_device_query_state (GdkDevice        *device,
                          GdkWindow        *window,
                          GdkWindow       **root_window,
@@ -1599,15 +1599,15 @@ _gdk_device_query_state (GdkDevice        *device,
                          gint             *win_y,
                          GdkModifierType  *mask)
 {
-  return GDK_DEVICE_GET_CLASS (device)->query_state (device,
-                                                     window,
-                                                     root_window,
-                                                     child_window,
-                                                     root_x,
-                                                     root_y,
-                                                     win_x,
-                                                     win_y,
-                                                     mask);
+  GDK_DEVICE_GET_CLASS (device)->query_state (device,
+                                              window,
+                                              root_window,
+                                              child_window,
+                                              root_x,
+                                              root_y,
+                                              win_x,
+                                              win_y,
+                                              mask);
 }
 
 GdkWindow *
index 0e5f67347129e2a0e362b22ea83818160e092d72..ff92ea4b41d01524d32080af6d1d2fbbf1a32141 100644 (file)
@@ -82,7 +82,7 @@ struct _GdkDeviceClass
                               GdkScreen  *screen,
                               gint        x,
                               gint        y);
-  gboolean (* query_state)   (GdkDevice       *device,
+  void (* query_state)       (GdkDevice       *device,
                               GdkWindow       *window,
                               GdkWindow      **root_window,
                               GdkWindow      **child_window,
@@ -151,7 +151,7 @@ void _gdk_device_add_slave (GdkDevice *device,
                             GdkDevice *slave);
 void _gdk_device_remove_slave (GdkDevice *device,
                                GdkDevice *slave);
-gboolean   _gdk_device_query_state            (GdkDevice        *device,
+void _gdk_device_query_state                  (GdkDevice        *device,
                                                GdkWindow        *window,
                                                GdkWindow       **root_window,
                                                GdkWindow       **child_window,
index 9a7852735010902b8a884b093ea50725a812eecc..8598cf62a72bdbcc072e19cc76191825e3c02190 100644 (file)
@@ -54,15 +54,15 @@ static void gdk_quartz_device_core_warp (GdkDevice *device,
                                          GdkScreen *screen,
                                          gint       x,
                                          gint       y);
-static gboolean gdk_quartz_device_core_query_state (GdkDevice        *device,
-                                                    GdkWindow        *window,
-                                                    GdkWindow       **root_window,
-                                                    GdkWindow       **child_window,
-                                                    gint             *root_x,
-                                                    gint             *root_y,
-                                                    gint             *win_x,
-                                                    gint             *win_y,
-                                                    GdkModifierType  *mask);
+static void gdk_quartz_device_core_query_state (GdkDevice        *device,
+                                                GdkWindow        *window,
+                                                GdkWindow       **root_window,
+                                                GdkWindow       **child_window,
+                                                gint             *root_x,
+                                                gint             *root_y,
+                                                gint             *win_x,
+                                                gint             *win_y,
+                                                GdkModifierType  *mask);
 static GdkGrabStatus gdk_quartz_device_core_grab   (GdkDevice     *device,
                                                     GdkWindow     *window,
                                                     gboolean       owner_events,
@@ -255,7 +255,7 @@ gdk_quartz_device_core_query_state_helper (GdkWindow       *window,
   return found_window;
 }
 
-static gboolean
+static void
 gdk_quartz_device_core_query_state (GdkDevice        *device,
                                     GdkWindow        *window,
                                     GdkWindow       **root_window,
@@ -288,8 +288,6 @@ gdk_quartz_device_core_query_state (GdkDevice        *device,
 
   if (root_y)
     *root_y = y_tmp;
-
-  return TRUE;
 }
 
 static GdkGrabStatus
index 1d6d0448a607dc7ce7fad86762409f11756045b0..dcd92a2d5e0f7e72e0d2078ca94a91049a5aac03 100644 (file)
@@ -177,7 +177,7 @@ gdk_device_core_warp (GdkDevice *device,
 {
 }
 
-static gboolean
+static void
 gdk_device_core_query_state (GdkDevice        *device,
                              GdkWindow        *window,
                              GdkWindow       **root_window,
@@ -208,8 +208,6 @@ gdk_device_core_query_state (GdkDevice        *device,
     *win_y = wd->surface_y;
   if (mask)
     *mask = wd->modifiers;
-
-  return TRUE;
 }
 
 static GdkGrabStatus
index 6bdd7e31c86f2c66476c19d04cf38e4c381fed3d..e3d8106ca2417193a3979d17ba3fcbe5b26360e2 100644 (file)
@@ -238,7 +238,7 @@ get_current_mask (void)
   return mask;
 }
 
-static gboolean
+static void
 gdk_device_win32_query_state (GdkDevice        *device,
                               GdkWindow        *window,
                               GdkWindow       **root_window,
@@ -303,8 +303,6 @@ gdk_device_win32_query_state (GdkDevice        *device,
 
   if (mask)
     *mask = get_current_mask ();
-
-  return TRUE;
 }
 
 static GdkGrabStatus
index 122787d3dc763ac025e7c389ace99f576c24f4ed..0a4474229da1eace9479692b9b93435765b37c8a 100644 (file)
@@ -52,15 +52,15 @@ static void gdk_device_wintab_warp (GdkDevice *device,
                                     GdkScreen *screen,
                                     gint       x,
                                     gint       y);
-static gboolean gdk_device_wintab_query_state (GdkDevice        *device,
-                                               GdkWindow        *window,
-                                               GdkWindow       **root_window,
-                                               GdkWindow       **child_window,
-                                               gint             *root_x,
-                                               gint             *root_y,
-                                               gint             *win_x,
-                                               gint             *win_y,
-                                               GdkModifierType  *mask);
+static void gdk_device_wintab_query_state (GdkDevice        *device,
+                                           GdkWindow        *window,
+                                           GdkWindow       **root_window,
+                                           GdkWindow       **child_window,
+                                           gint             *root_x,
+                                           gint             *root_y,
+                                           gint             *win_x,
+                                           gint             *win_y,
+                                           GdkModifierType  *mask);
 static GdkGrabStatus gdk_device_wintab_grab   (GdkDevice     *device,
                                                GdkWindow     *window,
                                                gboolean       owner_events,
@@ -161,7 +161,7 @@ gdk_device_wintab_warp (GdkDevice *device,
 {
 }
 
-static gboolean
+static void
 gdk_device_wintab_query_state (GdkDevice        *device,
                                GdkWindow        *window,
                                GdkWindow       **root_window,
@@ -172,7 +172,7 @@ gdk_device_wintab_query_state (GdkDevice        *device,
                                gint             *win_y,
                                GdkModifierType  *mask)
 {
-  return FALSE;
+  g_warning ("query_state unimplemented for wintab devices. Expect bad things.");
 }
 
 static GdkGrabStatus
index fcb8d7d21aed6f9ccb83be3fd3f3532f71f6a093..51cacb8ce614c65be1020dc278b954b6e0ed2bbf 100644 (file)
@@ -52,15 +52,15 @@ static void     gdk_x11_device_core_warp (GdkDevice *device,
                                           GdkScreen *screen,
                                           gint       x,
                                           gint       y);
-static gboolean gdk_x11_device_core_query_state (GdkDevice        *device,
-                                                 GdkWindow        *window,
-                                                 GdkWindow       **root_window,
-                                                 GdkWindow       **child_window,
-                                                 gint             *root_x,
-                                                 gint             *root_y,
-                                                 gint             *win_x,
-                                                 gint             *win_y,
-                                                 GdkModifierType  *mask);
+static void gdk_x11_device_core_query_state (GdkDevice        *device,
+                                             GdkWindow        *window,
+                                             GdkWindow       **root_window,
+                                             GdkWindow       **child_window,
+                                             gint             *root_x,
+                                             gint             *root_y,
+                                             gint             *win_x,
+                                             gint             *win_y,
+                                             GdkModifierType  *mask);
 static GdkGrabStatus gdk_x11_device_core_grab   (GdkDevice     *device,
                                                  GdkWindow     *window,
                                                  gboolean       owner_events,
@@ -235,7 +235,7 @@ gdk_x11_device_core_warp (GdkDevice *device,
   XWarpPointer (xdisplay, None, dest, 0, 0, 0, 0, x, y);
 }
 
-static gboolean
+static void
 gdk_x11_device_core_query_state (GdkDevice        *device,
                                  GdkWindow        *window,
                                  GdkWindow       **root_window,
@@ -255,17 +255,15 @@ gdk_x11_device_core_query_state (GdkDevice        *device,
   display = gdk_window_get_display (window);
   default_screen = gdk_display_get_default_screen (display);
 
-  if (G_LIKELY (GDK_X11_DISPLAY (display)->trusted_client))
-    {
-      if (!XQueryPointer (GDK_WINDOW_XDISPLAY (window),
-                          GDK_WINDOW_XID (window),
-                          &xroot_window,
-                          &xchild_window,
-                          &xroot_x, &xroot_y,
-                          &xwin_x, &xwin_y,
-                          &xmask))
-        return FALSE;
-    }
+  if (GDK_X11_DISPLAY (display)->trusted_client &&
+      XQueryPointer (GDK_WINDOW_XDISPLAY (window),
+                     GDK_WINDOW_XID (window),
+                     &xroot_window,
+                     &xchild_window,
+                     &xroot_x, &xroot_y,
+                     &xwin_x, &xwin_y,
+                     &xmask))
+    return;
   else
     {
       XSetWindowAttributes attributes;
@@ -308,8 +306,6 @@ gdk_x11_device_core_query_state (GdkDevice        *device,
 
   if (mask)
     *mask = xmask;
-
-  return TRUE;
 }
 
 static GdkGrabStatus
index 263b3f3a676898ca6cffc2b6d03b6a94f94a644c..dc13f8337900874f8b1a39f0b22ea8e94581b474 100644 (file)
@@ -78,15 +78,15 @@ static void gdk_x11_device_xi2_warp (GdkDevice *device,
                                      GdkScreen *screen,
                                      gint       x,
                                      gint       y);
-static gboolean gdk_x11_device_xi2_query_state (GdkDevice        *device,
-                                                GdkWindow        *window,
-                                                GdkWindow       **root_window,
-                                                GdkWindow       **child_window,
-                                                gint             *root_x,
-                                                gint             *root_y,
-                                                gint             *win_x,
-                                                gint             *win_y,
-                                                GdkModifierType  *mask);
+static void gdk_x11_device_xi2_query_state (GdkDevice        *device,
+                                            GdkWindow        *window,
+                                            GdkWindow       **root_window,
+                                            GdkWindow       **child_window,
+                                            gint             *root_x,
+                                            gint             *root_y,
+                                            gint             *win_x,
+                                            gint             *win_y,
+                                            GdkModifierType  *mask);
 
 static GdkGrabStatus gdk_x11_device_xi2_grab   (GdkDevice     *device,
                                                 GdkWindow     *window,
@@ -306,7 +306,7 @@ gdk_x11_device_xi2_warp (GdkDevice *device,
                  0, 0, 0, 0, x, y);
 }
 
-static gboolean
+static void
 gdk_x11_device_xi2_query_state (GdkDevice        *device,
                                 GdkWindow        *window,
                                 GdkWindow       **root_window,
@@ -326,26 +326,21 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
   XIModifierState mod_state;
   XIGroupState group_state;
 
-  if (!window || GDK_WINDOW_DESTROYED (window))
-    return FALSE;
-
   display = gdk_window_get_display (window);
   default_screen = gdk_display_get_default_screen (display);
 
-  if (G_LIKELY (GDK_X11_DISPLAY (display)->trusted_client))
-    {
-      if (!XIQueryPointer (GDK_WINDOW_XDISPLAY (window),
-                           device_xi2->device_id,
-                           GDK_WINDOW_XID (window),
-                           &xroot_window,
-                           &xchild_window,
-                           &xroot_x, &xroot_y,
-                           &xwin_x, &xwin_y,
-                           &button_state,
-                           &mod_state,
-                           &group_state))
-        return FALSE;
-    }
+  if (GDK_X11_DISPLAY (display)->trusted_client &&
+      XIQueryPointer (GDK_WINDOW_XDISPLAY (window),
+                      device_xi2->device_id,
+                      GDK_WINDOW_XID (window),
+                      &xroot_window,
+                      &xchild_window,
+                      &xroot_x, &xroot_y,
+                      &xwin_x, &xwin_y,
+                      &button_state,
+                      &mod_state,
+                      &group_state))
+    return;
   else
     {
       XSetWindowAttributes attributes;
@@ -393,8 +388,6 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
     *mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state, &group_state);
 
   free (button_state.mask);
-
-  return TRUE;
 }
 
 static GdkGrabStatus